package com.mes.common.dao;

import java.io.Serializable;
import java.util.List;

import com.mes.common.condition.Conditions;
import com.mes.common.exception.bo.BaseBusinessException;

/**
 * <p>
 * 根据给出的类名称返回该hibernate的model，应该仅仅完成复杂的查询操作， 其它的事情都放在对象的DAO中完成。 抛出异常由上层处理。
 * 参数中带有objectName的都不建议使用，在使用的时候建议先利用setObjectName方法设置objectName。
 * </p>
 * 
 * <p>
 * Created on Mar 12, 2008
 * </p>
 * 
 * @author lhy
 * 
 */
public interface IObjectQuery {
	/**
	 * 根据给出的model的名称生成该类的一个对象
	 * 
	 * @param objectName
	 * @return
	 * @throws BaseBusinessException
	 */
	@Deprecated
	public Serializable getObjectClassByName(String objectName)
			throws BaseBusinessException;

	/**
	 * 根据给出的条件和类名称得到该类的一个List，请注意objectName必须包括包名并注意大小写。
	 * 
	 * @param objectName
	 * @param condition
	 * @return
	 * @throws BaseBusinessException
	 */
	@Deprecated
	public List<Serializable> getObjects(String objectName,
			final Conditions conditions) throws BaseBusinessException;

	/**
	 * 根据给出的条件和类名称得到该类的一个List，请注意objectName必须包括包名并注意大小写。
	 * 
	 * @param objectName
	 * @param conditions
	 * @param from
	 * @param size
	 * @return
	 * @throws BaseBusinessException
	 */
	@Deprecated
	public List<Serializable> getObjects(String objectName,
			final Conditions conditions, Integer from, Integer size)
			throws BaseBusinessException;

	/**
	 * 根据给出的hql得到该类的一个List
	 * 
	 * @param hql
	 * @return
	 * @throws BaseBusinessException
	 */
	public List<Serializable> getObjects(String hql)
			throws BaseBusinessException;

	/**
	 * 根据给出hql和记录条数得到该类的一个List
	 * 
	 * @param hql
	 * @param from
	 * @param size
	 * @return
	 * @throws BaseBusinessException
	 */
	public List<Serializable> getObjects(String hql, Integer from, Integer size)
			throws BaseBusinessException;

	/**
	 * 根据给出的ObjectName和查询条件得到该查询的总记录数
	 * 
	 * @param objectName
	 * @param conditions
	 * @return
	 * @throws BaseBusinessException
	 */
	@Deprecated
	public Integer getObjectsSum(String objectName, final Conditions conditions)
			throws BaseBusinessException;

	/**
	 * 根据给出的ObjectName、条数约束和查询条件得到该查询的总记录数
	 * 
	 * @param objectName
	 * @param conditions
	 * @return
	 * @throws BaseBusinessException
	 */
	@Deprecated
	public Integer getObjectsSum(String objectName, final Conditions conditions,
			Integer from, Integer size) throws BaseBusinessException;

	/**
	 * 根据给出的HQL语句进行更新操作，此处不用写事物，最后的事务处理都交给Spring去完成
	 * 
	 * @param hql
	 * @return
	 * @throws BaseBusinessException
	 */
	public Boolean update(String hql) throws BaseBusinessException;

	/**
	 * 根据给出的条件组装成HQL语句，把条数限制也可以直接组装成HQL语句
	 * 
	 * @param objectName
	 * @param conditions
	 * @param from
	 * @param size
	 * @return
	 * @throws BaseBusinessException
	 */
	@Deprecated
	public String getQueryString(String objectName, Conditions conditions,
			Integer from, Integer size);

	/**
	 * 根据给出的条件组装成HQL语句
	 * 
	 * @param objectName
	 * @param conditions
	 * @return
	 * @throws BaseBusinessException
	 */
	@Deprecated
	public String getQueryString(String objectName, Conditions conditions);

	/**
	 * 根据给出的model的名称生成该类的一个对象
	 * 
	 * @return
	 * @throws BaseBusinessException
	 */
	public Serializable getObjectClass() throws BaseBusinessException;

	/**
	 * 根据给出的条件和类名称得到该类的一个List
	 * 
	 * @param condition
	 * @return
	 * @throws BaseBusinessException
	 */
	public List<Serializable> getObjects(final Conditions conditions)
			throws BaseBusinessException;

	/**
	 * 据给出的条件和类名称得到该类的一个List
	 * 
	 * @param conditions
	 * @param from
	 * @param size
	 * @return
	 * @throws BaseBusinessException
	 */
	public List<Serializable> getObjects(final Conditions conditions,
			Integer from, Integer size) throws BaseBusinessException;

	/**
	 * ��ݸ����ObjectName�Ͳ�ѯ�����õ��ò�ѯ���ܼ�¼��
	 * 
	 * @param conditions
	 * @return
	 * @throws BaseBusinessException
	 */
	public Integer getObjectsSum(final Conditions conditions)
			throws BaseBusinessException;

	/**
	 * 根据给出的ObjectName和查询条件得到该查询的总记录数
	 * 
	 * @param conditions
	 * @return
	 * @throws BaseBusinessException
	 */
	public Integer getObjectsSum(final String hqlConditions)
			throws BaseBusinessException;
	
	/**
	 * 根据给出的ObjectName和查询条件得到该查询的总记录数
	 * 
	 * @param conditions
	 * @return
	 * @throws BaseBusinessException
	 */
	public Integer getObjectsSum(final Conditions conditions, Integer from, Integer size)
			throws BaseBusinessException;
	
	/**
	 * 根据给出的ObjectName、条数约束和查询条件得到该查询的总记录数
	 * 
	 * @param conditions
	 * @return
	 * @throws BaseBusinessException
	 */
	public Integer getObjectsSum(final String hqlConditions, Integer from, Integer size)
			throws BaseBusinessException;

	/**
	 * 根据给出的ObjectName、条数约束和查询条件得到该查询的总记录数
	 * 
	 * @param objectName
	 * @param conditions
	 * @param from
	 * @param size
	 * @return
	 * @throws BaseBusinessException
	 */
	public String getQueryString(Conditions conditions, Integer from, Integer size);

	/**
	 * 根据给出的条件组装成HQL语句
	 * 
	 * @param objectName
	 * @param conditions
	 * @return
	 * @throws BaseBusinessException
	 */
	public String getQueryString(Conditions conditions);

	/**
	 * 得到操作的对象类
	 * 
	 * @return
	 */
	public String getObjectName();

	/**
	 * 设置操作的对象类，应该在使用以前进行设置
	 * 
	 * @param objectName
	 */
	public void setObjectName(String objectName);
}
